import ast

from 程序核心代码.ast节点.节点定义.具体ast节点.容器.带容器节点模版 import 带容器ast节点基础模型模板
from 程序核心代码.mvvm重构.基础定义.节点管理器.自动节点注册表 import 注册节点模型


@注册节点模型(ast.ClassDef)
class 类节点(带容器ast节点基础模型模板):

    def __init__(self,ast节点, 所属节点模型管理器,上级节点=None,节点位置=None):
        super().__init__(ast节点, 所属节点模型管理器, "类节点", 节点位置=节点位置,上级节点=上级节点)
        self.参数名称 ="类名"
        self.节点介绍 = self.获取属性("节点名称") + "：默认介绍内容"
        # 起始接口.节点标题名称 = 起始接口.节点类型
        # 起始接口.基础图形项 = 带容器的节点图形项(起始接口)
    def 节点数据解析(self) -> None:
        """
        解析类节点的相关信息，包括类名、基类、装饰器和类体。
        """
        # 解析类名
        self.类名 = self._ast节点.name
        self.参数值 = self.类名
        # 解析基类列表（可能为空）
        self.基类列表 = [base for base in self._ast节点.bases]

        # 解析装饰器列表（可能为空）
        self.装饰器列表 = [decorator for decorator in self._ast节点.decorator_list]

        # 解析类体
        self.类体 = self._ast节点.body

        # 初始化其他可能需要的属性
        self.类文档字符串 = ast.get_docstring(self._ast节点) if ast.get_docstring(self._ast节点) else ""
    def 节点输入异常检查(self):
        pass

    def 节点输出异常检查(self):
        pass

    def 参数值修改(self, 类名):
        #print("变量节点检测到变量名修改值为：", 变量名)
        #检测新参数是否合法 ,不合法则不修改
        if self.参数名检测(类名):
            if 类名!= self.参数值 :
                # print("修改前的ast节点")
                # print(ast.dump(起始接口._ast节点, annotate_fields=True, indent=4))
                self.所属节点模型管理器.ast操作器.修改节点(self.节点路径 + ["id"], 类名)
                self.所属节点模型管理器.重新计算整个容器()

        else:
            print("变量名不合法")
            self.图形项.节点参数.setPlainText(self.变量名)

